% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = XeLaTeX
% !TEX root = ParliamentUserGuide.tex

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Introduction to \acl{pmnt}}

\acl{pmnt} is a high-performance triple store and reasoner designed for the Semantic Web\urlcite{http://www.w3.org/2001/sw/}.  \acp{pmnt} initial development was funded by the \ac{darpa} through the \ac{daml} program under the name DAML DB\urlcite{http://www.daml.org/2001/09/damldb/} and was extended by \ac{bbn} for internal use in its R\&D programs.  \ac{bbn} released \ac{pmnt} as an open source project under the BSD license\urlcite{http://opensource.org/licenses/bsd-license.php} on SemWebCentral\urlcite{http://parliament.semwebcentral.org/} in 2009.  In 2018, \ac{bbn} migrated the \ac{pmnt} open source project to GitHub\urlcite{https://github.com/SemWebCentral/parliament} under the same license.

\acl{pmnt} is a trademark of \acl{bbn}.  It is so named because a group of owls is properly called a \emph{parliament} of owls.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Background}

The Semantic Web employs a different data model than a relational database.  A relational database stores data in tables (rows and columns) while \ac{rdf}\urlcite{http://www.w3.org/RDF/} represents data as a directed graph of ordered triples of the form (subject, predicate, object).  Accordingly, a Semantic Web data store is often called a semantic graph, graph store, knowledge base, or triple store.

A relational database can store a directed graph, and some graph stores are in fact implemented as a thin interface layer wrapping a relational database.  However, the query performance of such implementations is usually poor.  This is because the only straightforward way to store the graph with the required level of generality is to use a single table to store all the triples, and this schema tends to defeat relational query optimizers.

Early in the Semantic Web's evolution, \ac{bbn} encountered exactly this problem, and so the graph store we now call \ac{pmnt} was born.  The goal of \ac{pmnt} was to create a storage mechanism optimized specifically to the needs of the Semantic Web, and the result was a dramatic speed boost for \acp{bbn} Semantic Web programs.  Since its initial conception, \ac{pmnt} has served as a core component of several projects at \ac{bbn} for a number of U.S.\ Government customers.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{\ac{pmnt} Architecture}

\ac{pmnt} combines customized versions of the Web interface and query processor of Jena\urlcite{https://jena.apache.org/} with a high-performance storage engine and an innovative storage layout to deliver a complete triple store solution that is compatible with the  \ac{rdf}, \ac{owl}\urlcite{http://www.w3.org/2007/OWL/}, and \ac{sparql}\urlcite{http://www.w3.org/2009/sparql/wiki/Main\_Page} standards from the \ac{w3c} \autocite{KoEmDe:09:ParliamentIndexing}.

In addition, \ac{pmnt} includes a high-performance rule engine, which applies a set of inference rules to the directed graph of data in order to derive new facts.  This enables \ac{pmnt} to automatically and transparently infer additional facts and relationships in the data to enrich query results.  \acp{pmnt} rule engine currently implements all of the inference rules of \ac{rdfs} plus selected elements of \ac{owl} RL.

Figure~\ref{figure-parliament-layers} depicts the layered architecture of \ac{pmnt}.  The storage layer of \ac{pmnt} is written in C++, while the remainder is Java code.  Integrated with the Jena query processor are a number of useful extras, such as support for named graphs, accelerated reification support, and temporal, geospatial, and numerical indexes \autocites{Ko:2010}{BaKo:2012}.

\begin{figure}[htbp]
	\centering
	\includegraphics[width=1.0\textwidth]{architecture.pdf}
	\caption{Layered \ac{pmnt} Architecture}
	\label{figure-parliament-layers}
\end{figure}
